package com.yx.changdao.common.enums;

/**
 * 问题难度枚举,以及办结天数 和 延时天数 和 剩余多少天算即将逾期
 *
 * @author xiapeixin
 * @date 2020-4-7
 */
public enum DifficultLevel {

    /**
     * 规则摘自 文档 第11, 12条
     * <p>
     * 总控部门添加办理延期按钮。
     * 规则：3天的延时3天
     * 7天办理的延时5天
     * 2个月办理的延时1个月
     * 7天上报处理意见的延时5天
     * 只能一次延时
     * <p>
     * 临近逾期提示规则：
     * 3天办结，剩1天早上8点提示
     * 7天办结，剩3天早上8点提示
     * 2个月办结，剩一个月后开始提示，以后每隔5天提醒一次，增加延期的问题，提示规则一样。
     */

    SIMPLE("简单", "3天办结", 3, 3, 1),
    GENERAL("一般", "7天办结", 7, 5, 3),
    HARD("困难", "2月办结", 30, 30, 30),
    STINT("受限", "7天办结", 7, 5, 3);

    /**
     * 难度名称
     */
    private String name;
    /**
     * 要求办结天数提示
     */
    private String desc;
    /**
     * 要求办结天数
     */
    private Integer fulfill;
    /**
     * 延时天数
     */
    private Integer extendDay;
    /**
     * 临近逾期天数
     */
    private Integer overdueDay;

    DifficultLevel(String name, String desc, Integer fulfill, Integer extendDay, Integer overdueDay) {
        this.name = name;
        this.desc = desc;
        this.fulfill = fulfill;
        this.extendDay = extendDay;
        this.overdueDay = overdueDay;
    }

    public String n() {
        return name;
    }

    //根据难度获取办结天数提示
    public static String getDesc(String level) {
        for (DifficultLevel value : DifficultLevel.values()) {
            if (value.n().equals(level)) {
                return value.desc;
            }
        }
        throw new RuntimeException("未知办理难度");
    }

    //获取要求办结天数
    public static Integer getFulfillDay(String level) {
        for (DifficultLevel value : DifficultLevel.values()) {
            if (value.n().equals(level)) {
                return value.fulfill;
            }
        }
        throw new RuntimeException("未知办理难度");
    }


    //根据难度获取延时天数
    public static Integer getExtendDay(String level) {
        for (DifficultLevel value : DifficultLevel.values()) {
            if (value.n().equals(level)) {
                return value.extendDay;
            }
        }
        return 0;
    }

    //根据难度获取临近逾期天数
    public static Integer getOverdueDay(String level) {
        for (DifficultLevel value : DifficultLevel.values()) {
            if (value.n().equals(level)) {
                return value.overdueDay;
            }
        }
        return 0;
    }
}
